1. Field of the Invention
The present invention is directed to the annotation of source data to facilitate source data comprehension, particularly for software development. More particularly, the invention concerns the creation and organization of annotation information for source code and other types of source data.
2. Description of the Prior Art
By way of background, when a developer is added to a software project he/she is faced with the need to understand a large, complex code base. It is often helpful to describe functions, methods, or code blocks using more than just source code comments, such as state diagrams, flow charts, call graphs, control flow graphs, pseudo code, and/or a description of what the specified block accomplishes. Such annotation of source code (a type of metadata) is cumbersome because the annotation requires a technique for linking the metadata to discrete portions of the code, and for searching the metadata.
Existing annotation metadata solutions include simple text mark up languages for associating tags with annotation text. This is flat and does not easily allow multiple associations or dynamic viewing of those associations. Such solutions are analogous to a simple word processing document that allows one to add a “note” to text. This is essentially a one to one mapping and gives information that is supplemental (i.e., essentially a parenthetical reference), optional, and which does not necessarily stand on its own as an independent information source (without the underlying source code).
UML (Unified Modeling Language) modeling and associated code generation also results in the creation of annotation metadata, but this approach implies a directionality to the development process in which the design is completely documented in advance. Such solutions do not allow annotation information to be captured after the fact in order to add explanatory information related to the software implementation that is not captured normally in design specifications.
Thus, a problem space that is not properly addressed by the prior art is how to handle source annotation metadata in a meaningful way after it is created. Although tools exist for automatically generating annotation metadata, they are not specifically designed to manage the process of organizing this metadata in any meaningful way, associate it with ranges of the source code, or provide the flexibility to display different views of the results. The thinking in the art has been generally predicated on automated approaches to machine generation of annotation metadata (i.e., automated documentation) rather than on a way to store metadata so that it provides the most utility. The semantic analysis of code to understand “what it does” is a very complex problem that is not dealt with well by current metadata creation solutions that simply annotate lines of code with parenthetical information, as discussed above.
Accordingly, a need exists for an improved technique for annotating source code data. What is required is a solution that allows source code metadata to be created, organized, and searched in order to quickly obtain information about the underlying source code data. Rather than focusing on automated techniques for metadata generation, a new solution for finding expressive ways of organizing and managing such metadata would be desirable. An annotation technique having applicability to source data other than computer programming language source code would be of further benefit. Such alternative source data types could include natural language text, diagrams, maps and other graphical images, audio works, audio-visual works, and any other input data type capable of being annotated by way of media or encoding that can be stored and linked to facilitate human comprehension.